package com.kinyx.framework.vo;

import java.util.Date;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Null;
import javax.validation.constraints.PastOrPresent;
import javax.validation.constraints.Positive;
import javax.validation.constraints.PositiveOrZero;
import javax.validation.constraints.Size;

import com.kinyx.framework.business.KRandomUtils;
import com.kinyx.framework.constraints.AppKey;
import com.kinyx.framework.constraints.ClientType;
import com.kinyx.framework.constraints.SendID;
import com.kinyx.framework.constraints.Token;
import com.kinyx.framework.enums.impl.RandomRange;

import lombok.Getter;

/**
 * 框架约定数据
 */
@Getter
public class SysData {

	/** 唯一标识，由发送方设定值。 */
	@Size(max = 32)
	@SendID
	@NotNull
	private String sendId;
	/** 唯一标识，由接收方设定值。 */
	@Null
	private final String receiveId = KRandomUtils.randomString(false, 32, RandomRange.LETTER_FULL);
	/** 发送时间，由发送方设定值。 */
	@PastOrPresent
	@NotNull
	private Date sendTime;
	/** 接收时间，由接收方设定值。 */
	@Null
	private final Date receiveTime = new Date();
	/** 客户端唯一标识 */
	@Size(max = 32)
	@AppKey
	@NotNull
	private String appKey;
	/** 客户端类型 */
	@ClientType
	@NotNull
	private String clientType;
	/** 客户端版本号（大版本号） */
	@Positive
	@NotNull
	private Byte versionX;
	/** 客户端版本号（中版本号） */
	@PositiveOrZero
	@NotNull
	private Byte versionY;
	/** 客户端版本号（小版本号） */
	@PositiveOrZero
	@NotNull
	private Short versionZ;
	/** 令牌 */
	@Size(max = 64)
	@Token
	@NotNull
	private String token;

}
